package cn.stu.common.utils;

import cn.hutool.core.util.StrUtil;
import cn.stu.common.enums.EnumWithValue;


/**
 * enum工具
 *
 * @author 郑志豪
 * @date 2023/08/29
 */
public class EnumUtils {

    /**
     * 获取标签
     *
     * @param enumClass 枚举类
     * @param value     价值
     * @return {@link String}
     */
    public static <E extends Enum<E> & EnumWithValue> String getLabelByValue(Class<E> enumClass, String value) {
        if (StrUtil.isBlank(value)) {
            return null;
        }
        for (E enumConstant : enumClass.getEnumConstants()) {
            if (value.equals(enumConstant.getValue())) {
                return enumConstant.getLabel();
            }
        }
        return value;
    }

    /**
     * 获取值
     *
     * @param enumClass 枚举类
     * @param label     标签
     * @return {@link String}
     */
    public static <E extends Enum<E> & EnumWithValue> String getValueByLabel(Class<E> enumClass, String label) {
        if (StrUtil.isBlank(label)) {
            return StrUtil.EMPTY;
        }
        for (E enumConstant : enumClass.getEnumConstants()) {
            if (label.equals(enumConstant.getLabel())) {
                return enumConstant.getValue();
            }
        }
        return StrUtil.EMPTY;
    }

    public static <E extends Enum<E> & EnumWithValue> E getEnumByLabel(Class<E> enumClass, String label) {
        if (StrUtil.isBlank(label)) {
            return null;
        }
        for (E enumConstant : enumClass.getEnumConstants()) {
            if (label.equals(enumConstant.getLabel())) {
                return enumConstant;
            }
        }
        return null;
    }

    public static <E extends Enum<E> & EnumWithValue> E getEnumByValue(Class<E> enumClass, String value) {
        if (StrUtil.isBlank(value)) {
            return null;
        }
        for (E enumConstant : enumClass.getEnumConstants()) {
            if (value.equals(enumConstant.getValue())) {
                return enumConstant;
            }
        }
        return null;
    }
}
